import type { RouteRecordRaw } from 'vue-router'

export interface SideBarItem {
  path: string
  name: string
  title: string
  children?: SideBarItem[]
}

export function generateSidebar(mdRoutes: RouteRecordRaw[], currentPath: string): SideBarItem[] {
  const sidebarItems: SideBarItem[] = []

  // 解析当前路径，确定当前所在的一级目录
  const pathSegs = currentPath.split('/').filter(Boolean)

  // 如果当前路径不是以docs开头或者长度不足，返回空数组
  if (pathSegs[0] !== 'docs' || pathSegs.length < 2) {
    return sidebarItems
  }

  const currentDir = pathSegs[1] // 当前所在的一级目录，如 'animal-world'

  // 用于存储已处理的二级目录，避免重复
  const processedSubDirs = new Set<string>()

  mdRoutes.forEach((route) => {
    if (typeof route.path !== 'string' || route.path === '/') return

    const segs = route.path.split('/').filter(Boolean)

    // 过滤掉不以 docs 开头的路径
    if (segs[0] !== 'docs') return

    // 只处理属于当前一级目录下的路径
    if (segs[1] !== currentDir) return

    // 如果路径少于3段（如 /docs/animal-world），则跳过不显示在侧边栏
    if (segs.length < 3) return

    const subDir = segs[2] // 第三段作为二级目录名，如 'cat'

    // 如果是二级目录下的子目录（如 /docs/animal-world/cat/index.md 或 /docs/animal-world/cat/other.md）
    if (segs.length >= 4) {
      // 避免重复添加二级目录
      if (processedSubDirs.has(subDir)) return

      processedSubDirs.add(subDir)

      // 格式化标题，将连字符转换为空格并首字母大写
      const formatTitle = (str: string) => {
        // 处理中文目录名
        return str
          .split('-')
          .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
          .join(' ')
      }

      // 查找该二级目录下的所有文件
      const children = mdRoutes
        .filter((r) => {
          if (typeof r.path !== 'string') return false
          const rSegs = r.path.split('/').filter(Boolean)
          return (
            rSegs[0] === 'docs' &&
            rSegs[1] === currentDir &&
            rSegs[2] === subDir &&
            rSegs.length >= 4
          )
        })
        .map((r) => {
          const rSegs = r.path.split('/').filter(Boolean)
          const childTitle = rSegs[rSegs.length - 1]

          return {
            path: r.path,
            name: r.name as string,
            title: formatTitle(childTitle === 'index' ? subDir : childTitle),
          }
        })

      // 添加二级目录及其子项，点击标题时跳转到该文件夹的根路径
      sidebarItems.push({
        path: `/docs/${currentDir}/${subDir}/`,
        name: `${currentDir}-${subDir}`,
        title: formatTitle(subDir),
        children,
      })
    }
  })

  // 按标题排序
  return sidebarItems.sort((a, b) => a.title.localeCompare(b.title))
}
